"use strict";

exports.__esModule = true;
exports.deepAssign = deepAssign;

var _ = require(".");

var hasOwnProperty = Object.prototype.hasOwnProperty;

function assignKey(to, from, key) {
    var val = from[key];

    if (!(0, _.isDef)(val)) {
        return;
    }

    if (!hasOwnProperty.call(to, key) || !(0, _.isObj)(val) || typeof val === 'function') {
        to[key] = val;
    } else {
        // eslint-disable-next-line no-use-before-define
        to[key] = deepAssign(Object(to[key]), from[key]);
    }
}

function deepAssign(to, from) {
    Object.keys(from).forEach(function (key) {
        assignKey(to, from, key);
    });
    return to;
}